// copyright jyz.2024

#pragma once

#include "CoreMinimal.h"
#include "AbilitySystemComponent.h"
#include "AuraAbilitySystemComponent.generated.h"


DECLARE_MULTICAST_DELEGATE_OneParam(FEffectAssetTagsDelegate,const FGameplayTagContainer& /* InAssetTags*/)
/**
 * 
 */
UCLASS()
class AURARPGDEMO_API UAuraAbilitySystemComponent : public UAbilitySystemComponent
{
	GENERATED_BODY()

public:
	//能力角色信息已经设置好 
	void AbilityActorInfoSet();
	void AddGameAbilities(const TArray<TSubclassOf<UGameplayAbility>> StartupAbilities);
	FEffectAssetTagsDelegate EffectAssetTagsDelegate;
	
	void AbilityInputTagHeld(const FGameplayTag& InputTag);
	void AbilityInputTagReleased(const FGameplayTag& InputTag);
protected:

	
	//FOnGameplayEffectAppliedDelegate OnGameplayEffectAppliedDelegateToSelf;
	/** 当任何GE自我应用时在服务器上调用。这包括即时和持续时间基础的GE。 */
	//"自我应用"是指游戏效果被应用到实施它的对象上，这可能是因为特定的技能、物品或环境事件。
	//这包括瞬间和持续性的游戏效果，例如，一个吸血效果可能在玩家攻击敌人时触发，
	//或者一种速度增益效果可能会在一段时间内提高玩家的移动速度。
	//当这个事件发生时，所有订阅了OnGameplayEffectAppliedDelegateToSelf的函数都会被调用，
	//并且可能会执行更深一步的逻辑，比如更新用户界面来表示新的效果，修改角色的属性，等等。
	UFUNCTION(Client,Reliable)
	void ClientEffectApplied( UAbilitySystemComponent* InASC, const FGameplayEffectSpec& InEffectSpec, FActiveGameplayEffectHandle InActiveEffectHandle);
};
